// 全局state 存放所有模块，业务线都有可能调用的状态
// 把state放入mutations是为了方便开发，观察状态 ，和状态对应的相关方法
import util from '@/utils/util';
import _ from 'lodash';
import consts from 'Service/store/const'

const DEFAULTPLAYLIST = {
        src: 'http://m10.music.126.net/20190223174539/fc559e34420ca10fa1c72fa56da8d01a/ymusic/5f9d/1466/60df/148916f4098ef9468edc45195a8d29b9.mp3',
        name: '',
        vid: 123456,
        poster: require('Assets/images/default_album.jpg')
    };

export const state = {
    /**
     *  播放列表 状态（仿止初始化播放器报错，为此保留了一个初始的播放列表）
     */
    playerList: [DEFAULTPLAYLIST],
    currentPlayIndex: 0,
    currentPlayLyric: ''

}

//全局mutations
export const mutations = {
    /**
     * 设置-播放列表
     * @param {Object} state  所有 state 定义的状态
     * @param {Object} data API得到的 歌单详情的数据
     */
    [consts.SETPLAYLIST](state, data){
        const arr = data.playlist.tracks;

        // 判断初始的 播放列表 是否存在，存在就删除掉
        if(state.playerList.length === 1){
            let trackIndex = state.playerList.findIndex(i => i.id == 123456);
            state.playerList.splice(trackIndex, 1);
        }
        
        arr.forEach(item => state.playerList.push(item));
    },
    /**
     * 设置-播放列表中的播放链接
     * @param {Object} state  所有 state 定义的状态
     * @param {Array} data  API得到的 音乐链接数据
     */
    [consts.SETPLAYURL](state, data){
        data.forEach(item => {
            if (!_.isString(item.url)) {
                this.commit(consts.SETCURRENTPLAYINDEX, 0);
                console.error('获取音乐播放链接异常', item.url);
                return;
            };

            let trackIndex = state.playerList.findIndex(i => i.id == item.id);
            if(trackIndex != -1){
                let trackItem = state.playerList[trackIndex];
                

                trackItem.src = item.url;
                state.playerList.splice(trackIndex, 1, trackItem);
            };
        });
    },
    /**
     * 设置-当前播放的索引
     * @param {Object} state  所有 state 定义的状态
     * @param {Number} data 索引
     */
    [consts.SETCURRENTPLAYINDEX](state, data){
        state.currentPlayIndex = data;
    },
    /**
     * 变更-当前播放的索引 **** 注：该方法不会触发 切换歌曲 ****
     * @param {Object} state  所有 state 定义的状态
     * @param {Number} data 索引
     */
    [consts.CHANGECURRENTPLAYINDEX](state, data) {
        state.currentPlayIndex = data;
    },
    /**
     * 设置-播放的歌词
     * @param {Object} state  所有 state 定义的状态
     * @param {Object} data API得到的 歌词详情数据
     */
    [consts.SETPLAYLYRIC](state, data){
        if(_.isObject(data)){
            state.currentPlayLyric = data.lyric.replace(/\[\D+\:\D+\]/, '');
        }else{
            state.currentPlayLyric = '';
        }
    },
    /**
     * 清空播放列表
     * @param {Object} state  所有 state 定义的状态
     */
    [consts.EMPTYPLAYLIST](state){
        state.playerList = [DEFAULTPLAYLIST];
    },
}
